#pragma unmanaged
#pragma once

#include "cell.h"

namespace O1 {
	namespace Storage {
		namespace Memory {

			cell::cell(const byte* source, const int size) {
				data = nullptr;
				if (size > 0) {
					void*p = malloc(size);
					if (p)
					{
						std::memcpy(p, source, size);
						data = static_cast<byte*>(p);
					}
				}
			};

			cell::cell(cell&& source) {
				data = source.data;
				source.data = nullptr;
			};

			cell& cell::operator= (cell&& rhv) {
				swap(rhv);
				return *this;
			};

			cell::~cell() {
				if (data != nullptr) {
					free(data);
					data = nullptr;
				}
			};

			void cell::swap(cell& new_value) {
				using std::swap;
				swap(data, new_value.data);
			}
		}
	}
}
